CSS 그리λμ μλ λ°°μΉ κΈ°λ₯μ μ¬μΈ΅μ μΌλ‘ μμλ³΄κ³ , μμ΄ν μμΉ μ μ΄ λ°©λ², λ€μν μκ³ λ¦¬μ¦ μ΄ν΄, κ·Έλ¦¬κ³ κΈλ‘λ² μ¬μ©μλ₯Ό μν λμ λ μ΄μμ κ΅¬μΆ λ°©λ²μ λ°°μ보μΈμ.
CSS 그리λ μλ λ°°μΉ: μλ μμ΄ν μμΉ μ§μ μκ³ λ¦¬μ¦ λ§μ€ν°νκΈ°
CSS 그리λλ κ°λ°μκ° λ³΅μ‘νκ³ μ μ°ν λ μ΄μμμ μ½κ² λ§λ€ μ μκ² ν΄μ£Όλ κ°λ ₯ν λ μ΄μμ μμ€ν μ λλ€. CSS 그리λμ ν΅μ¬ κΈ°λ₯ μ€ νλλ 그리λ 컨ν μ΄λ λ΄μ 그리λ μμ΄ν μ μλμΌλ‘ λ°°μΉνλ μλ λ°°μΉ(auto-placement) κΈ°λ₯μ λλ€. μ΄ κΈ°λ₯μ μμ΄ν μ μλ ν¬κΈ°λ₯Ό 미리 μ μ μλ κ²½μ°, νΉν λμ μ΄κ³ λ°μνμΈ λ μ΄μμμ ꡬμΆν λ λ§€μ° μ μ©ν©λλ€. μ΄ λΈλ‘κ·Έ ν¬μ€νΈμμλ CSS 그리λ μλ λ°°μΉμ 볡μ‘ν μΈ‘λ©΄μ κΉμ΄ νκ³ λ€μ΄, λ€μν μκ³ λ¦¬μ¦, μμ± λ° μ€μ μμ λ₯Ό λ€λ£¨μ΄ κΈλ‘λ² μ¬μ©μλ₯Ό μν μΉ λ μ΄μμ λμμΈμ μ΄ νμμ μΈ μΈ‘λ©΄μ λ§μ€ν°νλ λ° λμμ λ릴 κ²μ λλ€.
CSS 그리λμ κΈ°λ³Έ μ΄ν΄νκΈ°
μλ λ°°μΉμ λν΄ μμ보기 μ μ, CSS 그리λμ κΈ°λ³Έμ λΉ λ₯΄κ² 볡μ΅ν΄ λ³΄κ² μ΅λλ€. 그리λ λ μ΄μμμ 그리λ 컨ν
μ΄λμ κ·Έ μμ 그리λ μμ΄ν
μ μ μνμ¬ λ§λ€μ΄μ§λλ€. 그리λ 컨ν
μ΄λλ 그리λ μν μ νλ λΆλͺ¨ μμμ΄λ©°, 그리λ μμ΄ν
μ κ·Έ μμ μμλ€λ‘ 그리λμ νκ³Ό μ΄ λ΄μ λ°°μΉλ©λλ€.
μ΄ν΄ν΄μΌ ν μ£Όμ μμ±μ λ€μκ³Ό κ°μ΅λλ€:
display: grid;λλdisplay: inline-grid;: 컨ν μ΄λμ μ΄ μμ±μ μ μ©νλ©΄ 그리λ 컨ν μ΄λκ° λ©λλ€.grid-template-columnsμgrid-template-rows: μ΄ μμ±λ€μ κ°κ° 그리λμ μ΄κ³Ό νμ ν¬κΈ°λ₯Ό μ μν©λλ€. κ°μ ν½μ (px), λ°±λΆμ¨(%), λΉμ¨(fr) λλ λ€λ₯Έ μ ν¨ν CSS λ¨μλ₯Ό μ¬μ©ν μ μμ΅λλ€.grid-column-start,grid-column-end,grid-row-start,grid-row-end: μ΄ μμ±λ€μ μμμ κ³Ό λμ μ μ§μ νμ¬ κ·Έλ¦¬λ μμ΄ν μ λͺ μμ μΌλ‘ λ°°μΉν μ μκ² ν΄μ€λλ€.grid-area:grid-row-start,grid-column-start,grid-row-end,grid-column-endλ₯Ό κ²°ν©ν λ¨μΆ μμ±μ λλ€.
μλ λ°°μΉμ ν
μλ λ°°μΉλ grid-column-startλ grid-row-start κ°μ μμ±μ μ¬μ©νμ¬ λͺ
μμ μΈ λ°°μΉκ° μ μλμ§ μμμ λ CSS 그리λκ° κ·Έλ¦¬λ μμ΄ν
μ μλμΌλ‘ λ°°μΉνλ λ©μ»€λμ¦μ
λλ€. μ΄λ 그리λ μμ΄ν
μ μκ° λμ μ΄κ±°λ λ μ΄μμμ΄ λ€μν νλ©΄ ν¬κΈ°λ μ½ν
μΈ λ³νμ λ§€λλ½κ² μ μνκΈ°λ₯Ό μν λ λ§€μ° μ μ©ν©λλ€. μλ λ°°μΉ μκ³ λ¦¬μ¦μ 그리λ 컨ν
μ΄λμ ꡬ쑰, κΈ°μ‘΄ μμ΄ν
λ°°μΉ, κ·Έλ¦¬κ³ μ¬μ© κ°λ₯ν 곡κ°μ λΆμνμ¬ κ° μμ΄ν
μ μμΉλ₯Ό κ²°μ ν©λλ€.
μλ λ°°μΉ μκ³ λ¦¬μ¦
CSS 그리λλ μ£Όλ‘ grid-auto-flow μμ±μΌλ‘ μ μ΄λλ λ€μν μλ λ°°μΉ μκ³ λ¦¬μ¦μ μ 곡ν©λλ€. μ΄ μκ³ λ¦¬μ¦λ€μ μ΄ν΄νλ κ²μ 그리λ μμ΄ν
μ΄ μ΄λ»κ² λ°°μΉλλμ§ μ μ΄νλ λ° λ§€μ° μ€μν©λλ€.
grid-auto-flow: row; (κΈ°λ³Έκ°)
μ΄κ²μ΄ κΈ°λ³Έκ°μ λλ€. μμ΄ν λ€μ ν λ¨μλ‘ λ°°μΉλ©λλ€. νμ¬ νμ 곡κ°μ΄ λΆμ‘±νλ©΄ μμ΄ν λ€μ μλμΌλ‘ λ€μ νμΌλ‘ μ€ λ°κΏλ©λλ€. μνμΌλ‘ μμλ₯Ό μ±μ°λ€κ° μλ λ€μ μ€λ‘ λμ΄κ°λ κ²κ³Ό κ°λ€κ³ μκ°νλ©΄ λ©λλ€. μ΄κ²μ΄ μΌλ°μ μΌλ‘ κ°μ₯ ννκ³ μμΈ‘ κ°λ₯ν λμμ λλ€.
μμ:
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-flow: row; /* Default */
}
μ΄ μ€μ μ μ¬μ©νλ©΄, μμ΄ν λ€μ 그리λ μ΄μ μνμΌλ‘ μ±μ°κ³ μΈ λ²μ§Έ μ΄ μ΄νμλ λ€μ νμΌλ‘ μ€ λ°κΏλ©λλ€. μ΄λ μ μμκ±°λ μ¬μ΄νΈμ μν λͺ©λ‘κ³Ό κ°μ λ§μ λ μ΄μμμ μ’μ μΆλ°μ μ λλ€.
grid-auto-flow: column;
μ΄ μκ³ λ¦¬μ¦μ μμ΄ν μ μ΄ λ¨μλ‘ λ°°μΉν©λλ€. νμ¬ μ΄μ 곡κ°μ΄ λΆμ‘±νλ©΄ μμ΄ν λ€μ μ€λ₯Έμͺ½μ λ€μ μ΄λ‘ μ΄λν©λλ€. μ΄λ λ μΌλ°μ μ΄μ§λ§ νΉμ λ μ΄μμμ μ μ©ν©λλ€.
μμ:
.grid-container {
display: grid;
grid-template-rows: repeat(3, 1fr);
grid-auto-flow: column;
}
μ΄ κ²½μ°, μμ΄ν λ€μ κ° μ΄μ μμμ μλλ‘ μ±μ°λ©΄μ 그리λλ₯Ό μ±μ°κ³ , κ·Έ λ€μ μ¬μ© κ°λ₯ν λ€μ μ΄λ‘ μ΄λνκ² λ©λλ€.
grid-auto-flow: row dense; λ° grid-auto-flow: column dense;
dense ν€μλλ μλ λ°°μΉ λμμ μμ ν©λλ€. denseλ₯Ό μ¬μ©νλ©΄ 그리λ μκ³ λ¦¬μ¦μ μμ΄ν
μ μ¬λ°°μΉνμ¬ κ·Έλ¦¬λμ λΉ κ³΅κ°μ μ±μ°λ €κ³ μλν©λλ€. μ΄λ λ μ½€ν©νΈν λ μ΄μμμ λ§λ€ μ μμ§λ§, μ‘°μ¬νμ§ μμΌλ©΄ μμ΄ν
μ μκ°μ μμκ° λ°λ μ μμ΅λλ€. μ£Όμν΄μ μ¬μ©νκ³ μ κ·Όμ± μν₯μ κ³ λ €ν΄μΌ ν©λλ€.
μμ:
.grid-container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-flow: row dense;
}
.item-one {
grid-column: span 2;
}
μ΄ μμμμ item-oneμ λ κ°μ μ΄μ μ°¨μ§νμ¬ λΉ κ³΅κ°μ λ§λλλ€. dense ν€μλλ μ΄ λΉ κ³΅κ°μ λ€μ μμ΄ν
λ€λ‘ μ±μ°λ €κ³ μλν κ²μ
λλ€. μ΄ μ κ·Ό λ°©μμ ν
μ€νΈ μ€μ¬μ λ μ΄μμμ²λΌ μ½ν
μΈ μμκ° μ€μν λ μκΈ°μΉ μμ κ²°κ³Όλ₯Ό μ΄λν μ μμ΅λλ€. `dense`λ₯Ό μ¬μ©ν λλ μ κ·Όμ±κ³Ό μ€ν¬λ¦° 리λ μμλ₯Ό κ³ λ €νμΈμ.
그리λ μμ±μΌλ‘ μλ λ°°μΉ μ μ΄νκΈ°
grid-auto-flowκ° μλ λ°°μΉμ μΌλ°μ μΈ λ°©ν₯κ³Ό λ°λλ₯Ό μ μ΄νλ λμ, λ€λ₯Έ μ¬λ¬ 그리λ μμ±λ€λ μμ΄ν
μ΄ μ΄λ»κ² λ°°μΉλλμ§μ μν₯μ λ―ΈμΉ©λλ€.
grid-template-columnsμ grid-template-rows
그리λμ μ΄κ³Ό νμ ν¬κΈ°λ μλ λ°°μΉμ μ§μ μ μΈ μν₯μ λ―ΈμΉ©λλ€. μνλ λ μ΄μμμ μ»κΈ° μν΄ μ΄ ν¬κΈ°λ€μ μ μ€νκ² μ μν΄μΌ ν©λλ€. κ³ μ λ¨μ(px), μλ λ¨μ(%), λλ μ μ°ν λ¨μ(fr)λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μμ (λ°μν μ΄μ fr λ¨μ μ¬μ©):
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); /* Responsive Columns */
grid-auto-flow: row;
}
μ΄ μμλ auto-fit(λμ€μ μ€λͺ
)μ μ¬μ©νμ¬ μ¬μ© κ°λ₯ν 곡κ°μ λ§μΆ° μ‘°μ λλ λ°μν μ΄μ λ§λλλ€. κ° μ΄μ μ΅μ 200px λλΉ(minmax(200px, 1fr))κ° λλ©°, μ¬μ© κ°λ₯ν 곡κ°μ μ±μ°κΈ° μν΄ λμ΄λ©λλ€. μ΄ μ κ·Ό λ°©μμ λ€μν νλ©΄ ν¬κΈ°μμ λ리 μ μ©λ μ μμ΅λλ€.
grid-columnκ³Ό grid-row (κ·Έλ¦¬κ³ λ¨μΆ μμ±μΈ grid-area)
μ΄ μμ±λ€μ 그리λ μμ΄ν μ μμμ κ³Ό λμ μ λͺ μμ μΌλ‘ μ μν©λλ€. μ΄ μμ±λ€μ μ§μ νλ©΄ μλ λ°°μΉ μκ³ λ¦¬μ¦μ ν΄λΉ μμΉλ₯Ό μ‘΄μ€ν©λλ€. μ΄κ²μ΄ λ°λ‘ λλ¨Έμ§ μμ΄ν μ λν΄μλ μλ λ°°μΉλ₯Ό νμ©νλ©΄μ λΆλΆμ μΌλ‘ λ°°μΉλ₯Ό μ μ΄ν μ μλ λ°©λ²μ λλ€. μ μ°ν λμμΈμ ꡬμΆνλ λ° μ΄κ²μ μ΄ν΄νλ κ²μ΄ λ§€μ° μ€μνλ€λ μ μ κΈ°μ΅νμΈμ.
μμ:
.item-one {
grid-column: 1 / 3; /* Spans columns 1 and 2 */
}
μ΄ μμμμ item-oneμ λͺ
μμ μΌλ‘ λ°°μΉλλ©°, λ€λ₯Έ μμ΄ν
λ€μ grid-auto-flowμ 그리λ 컨ν
μ΄λμ μ¬μ© κ°λ₯ν 곡κ°μ μ¬μ©νμ¬ κ·Έ μ£Όμμ λ°°μΉλ©λλ€.
grid-auto-columnsμ grid-auto-rows
μ΄ μμ±λ€μ μμμ μΌλ‘ μμ±λ 그리λ μ΄κ³Ό νμ ν¬κΈ°λ₯Ό μ μν©λλ€. 그리λ μκ³ λ¦¬μ¦μ΄ λͺ
μμ μΌλ‘ μ μλ 그리λ ν
νλ¦Ώ μΈλΆμ μμΉμ μμ΄ν
μ λ°°μΉν λ, μμμ νΈλμ μμ±ν©λλ€. grid-auto-columnsμ grid-auto-rowsλ μ΄λ¬ν μμμ νΈλμ ν¬κΈ°λ₯Ό μ μ΄ν©λλ€.
μμ:
.grid-container {
display: grid;
grid-template-columns: 100px 200px;
grid-auto-columns: 150px; /* Implicit column size */
}
λ§μ½ 그리λ 컨ν μ΄λκ° λͺ μμ μΌλ‘ μ μλ λ κ°λ₯Ό λμ΄μλ μ΄μ μμ΄ν μ λ°°μΉνλ€λ©΄, μλ‘ μμ±λλ μ΄μ 150px λλΉκ° λ©λλ€.
μ€μ©μ μΈ μμ λ° μ¬μ© μ¬λ‘
μ€μ μλ리μ€μμ μλ λ°°μΉλ₯Ό μ¬μ©νλ λͺ κ°μ§ μ€μ©μ μΈ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
1. λ°μν μν λͺ©λ‘
μΌλ°μ μΈ μ¬μ© μ¬λ‘λ λ°μν μν λͺ©λ‘μ λ§λλ κ²μ λλ€. μμ΄ν λ€μ΄ 그리λμ μλμΌλ‘ λ°°μ΄λμ΄ λ€μν νλ©΄ ν¬κΈ°μ μ μνκΈ°λ₯Ό μν©λλ€.
HTML (κ°λ¨ν μν μμ΄ν ):
<div class="product-grid">
<div class="product-item">
<img src="product1.jpg" alt="Product 1">
<h3>Product 1</h3>
<p>Description of Product 1.</p>
</div>
<div class="product-item">
<img src="product2.jpg" alt="Product 2">
<h3>Product 2</h3>
<p>Description of Product 2.</p>
</div>
<!-- More product items -->
</div>
CSS (auto-fitκ³Ό minmax μ¬μ©):
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px; /* Adds space between grid items */
}
.product-item {
border: 1px solid #ccc;
padding: 10px;
}
μ΄ μμμμ repeat(auto-fit, minmax(250px, 1fr))λ μ΅μ 250px λλΉμ μ΄μ λ§λλλ€. νλ©΄ ν¬κΈ°κ° 컀μ§λ©΄ λ λ§μ μ΄μ΄ 컨ν
μ΄λμ λ€μ΄κ° μ μμ΅λλ€. νλ©΄μ΄ μμμ§λ©΄ μ΄λ€μ μ¬μ© κ°λ₯ν 곡κ°μ λ§κ² μμ
λλ€. μ΄κ²μ λ€μν κΈ°κΈ°μμ λμ μΌλ‘ μ μνλ λ°μν μν 그리λλ₯Ό ꡬμΆνλ κ°λ¨νλ©΄μλ ν¨κ³Όμ μΈ λ°©λ²μΌλ‘, μ μΈκ³μ μΌλ‘ μ’μ μ¬μ©μ κ²½νμ 보μ₯ν©λλ€.
2. λμ μ΄λ―Έμ§ κ°€λ¬λ¦¬
λ λ€λ₯Έ μ¬μ© μ¬λ‘λ λ€μν ν¬κΈ°μ μ΄λ―Έμ§λ€μ΄ 그리λμ λ°°μ΄λλ λμ μ΄λ―Έμ§ κ°€λ¬λ¦¬λ₯Ό λ§λλ κ²μ λλ€. κ° μ΄λ―Έμ§λ₯Ό λͺ μμ μΌλ‘ λ°°μΉνλ λμ , 그리λκ° μλμΌλ‘ λ μ΄μμμ μ²λ¦¬νκΈ°λ₯Ό μν©λλ€.
HTML (μ΄λ―Έμ§ μμ΄ν ):
<div class="image-gallery">
<img src="image1.jpg" alt="Image 1">
<img src="image2.jpg" alt="Image 2">
<img src="image3.jpg" alt="Image 3">
<!-- More image items -->
</div>
CSS (κ°λ¨ν 그리λ λ μ΄μμ):
.image-gallery {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
grid-auto-rows: 100px; /* Set a default row height */
gap: 10px;
}
.image-gallery img {
width: 100%; /* Ensure images fill the grid cell */
height: 100%;
object-fit: cover; /* Important for preserving aspect ratio */
}
μ΄ μμμμ object-fit: cover; μ€νμΌμ μ΄λ―Έμ§κ° 그리λ μ
μμ λ§μΆ°μ§λ©΄μ μ’
ν‘λΉλ₯Ό μ μ§νλλ‘ λ³΄μ₯ν©λλ€. grid-auto-rows μμ±μ 그리λ μμ΄ν
μ λν κΈ°λ³Έ λμ΄λ₯Ό μ 곡ν©λλ€. auto-fit ν€μλλ 컨ν
μ΄λ λλΉμ λ°λΌ μ΄μ μλ₯Ό μλμΌλ‘ μ‘°μ ν©λλ€. μ΄ μμλ₯Ό μ νμ©νλ©΄ μ μΈκ³ μ¬μ©μμκ² μκ°μ μΌλ‘ λ§€λ ₯μ μ΄κ³ μ μ°ν μ΄λ―Έμ§ κ°€λ¬λ¦¬λ₯Ό μ 곡ν μ μμ΅λλ€. νΉν λ€μν λμνμ κ°μ§ κ΅μ μ¬μ©μλ₯Ό μν΄ λΌμ΄λΈλ¬λ¦¬λ μ μ²λ¦¬κΈ°λ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ΅μ ννλ κ²μ κ³ λ €νμΈμ.
3. μ½ν μΈ μ°μ λ μ΄μμ
μ£Όμ μ½ν
μΈ λ₯Ό λ¨Όμ λ°°μΉνκ³ κ΄λ ¨ μ½ν
μΈ λ μ¬μ΄λλ°λ₯Ό κ·Έ λ€μμ λ°°μΉνλ μ½ν
μΈ μ°μ λ μ΄μμμ λ§λ€ μ μμ΅λλ€. CSS 그리λλ₯Ό μ¬μ©νλ©΄ λ°μν λ μ΄μμμ μ μ§νλ©΄μ grid-columnμ΄λ grid-rowλ₯Ό μ¬μ©νμ¬ μ½ν
μΈ μμλ₯Ό μ μ΄ν μ μμ΅λλ€.
HTML (κ°λ¨ν λ μ΄μμ):
<div class="content-container">
<div class="main-content">
<h2>Main Content</h2>
<p>This is the main content of the page...</p>
</div>
<div class="sidebar">
<h3>Sidebar</h3>
<p>Related content, ads, or navigation...</p>
</div>
</div>
CSS (그리λλ‘ μ½ν μΈ λ°°μ΄νκΈ°):
.content-container {
display: grid;
grid-template-columns: 1fr 300px; /* Two columns */
gap: 20px;
}
.main-content {
grid-column: 1; /* Stays in the first column */
}
.sidebar {
grid-column: 2; /* Stays in the second column */
}
/* Responsive adjustment for smaller screens */
@media (max-width: 768px) {
.content-container {
grid-template-columns: 1fr; /* Stack columns on smaller screens */
}
.sidebar {
grid-column: 1; /* Place sidebar under main content */
}
}
μ΄ μ κ·Ό λ°©μμ `main-content`κ° νμ HTML μμ€ μμμμ λ¨Όμ λνλλλ‘ λ³΄μ₯νλ©°, μ΄λ μ κ·Όμ±κ³Ό SEOμ μ 리ν©λλ€. ν° νλ©΄μμλ λλν νμλκ³ , μμ νλ©΄μμλ μμ§μΌλ‘ μμ λλ€. μ΄λ νΉν λͺ¨λ°μΌ μ°μ λμμΈ μμΉμ κ³ λ €ν λ μ μΈκ³μ μΌλ‘ κ΄λ ¨μ΄ μμ΅λλ€.
auto-fit λ auto-fill
auto-fitκ³Ό auto-fillμ λͺ¨λ grid-template-columnsμ grid-template-rows μμ±μμ μ¬μ©λλ ν€μλλ‘ λ°μν 그리λλ₯Ό λ§λλ λ° λμμ΄ λ©λλ€. λμ λΉμ·νκ² λμνμ§λ§ λ―Έλ¬ν μ°¨μ΄κ° μμ΅λλ€:
auto-fit: 그리λ μμ΄ν μ΄ μ¬μ© κ°λ₯ν 곡κ°μ μ±μ°κΈ° μν΄ νμ₯λ©λλ€. λͺ¨λ μ΄μ μ±μΈ λ§νΌ μμ΄ν μ΄ μΆ©λΆνμ§ μμΌλ©΄ λΉ μ΄μ μΆμλ©λλ€.auto-fill: 그리λλ μ¬μ© κ°λ₯ν 곡κ°μ μ±μ°κΈ° μν΄ λΉμ΄μλ μμμ μ΄(λλ ν)μ λ§λλλ€. μμ΄ν λ€μ 곡κ°μ μ±μ°κΈ° μν΄ νμ₯λμ§ μμ΅λλ€.
μ°¨μ΄μ μ 보μ¬μ£ΌκΈ° μν΄ λ€μμ κ³ λ €ν΄ λ³΄μΈμ:
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); /* auto-fit */
/* OR */
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); /* auto-fill */
width: 600px;
}
.item {
background-color: lightgrey;
border: 1px solid black;
padding: 10px;
}
μ΄ λ¨μνλ μμμμ, 그리λμ λ κ°μ μμ΄ν
λ§ μλ€λ©΄, auto-fitμ μ΄λ€μ΄ 600px λλΉλ₯Ό μ±μ°λλ‘ λμ΄λκ² νμ¬ λ μ΄μ΄ κ°κ° 300px λλΉκ° λκ² ν©λλ€. λ°λ©΄μ auto-fillμ μ¬μ©νλ©΄, 4κ°μ μ΄ μ€ 2κ°λ§ μμ΄ν
μ ν¬ν¨νλ λ° μ¬μ©λλ―λ‘, λ κ°μ 150px λλΉ μ΄κ³Ό μμ λ κ°μ λΉμ΄μλ 150px λλΉ μ΄μ΄ μμ±λ©λλ€.
ν΅μ¬μ auto-fitμ λΉ νΈλμ μΆμνλ λ°λ©΄, auto-fillμ λΉμλλ€λ κ²μ
λλ€. λ μ΄μμ μꡬ μ¬νμ κ°μ₯ μ ν©ν ν€μλλ₯Ό μ ννμΈμ. μΌλ°μ μΌλ‘, μμ΄ν
μ΄ μ¬μ© κ°λ₯ν 곡κ°μ μ±μ°λλ‘ νμ₯λκΈ°λ₯Ό μν λλ auto-fitμ μ¬μ©νκ³ , ν¨λ©μ΄λ μκ° ν¨κ³Όλ₯Ό μν΄ λΉ νΈλμ λ§λ€κ±°λ μ½ν
μΈ λλ λΉ μμμΌλ‘ μ¬μ© κ°λ₯ν λͺ¨λ 곡κ°μ΄ νμ©λλλ‘ λ³΄μ₯νκ³ μΆμ λλ auto-fillμ μ¬μ©ν©λλ€.
μ κ·Όμ± κ³ λ €μ¬ν
μλ λ°°μΉλ₯Ό μ¬μ©ν λ μ κ·Όμ±μ κ³ λ €νλ κ²μ΄ λ§€μ° μ€μν©λλ€. HTML μμ€ μ½λμ μμ΄ν μμλ μ€ν¬λ¦° 리λμ μ½κΈ° μμλ₯Ό κ²°μ ν©λλ€. λ§μ½ `grid-auto-flow: dense;`λ₯Ό μ¬μ©νκ±°λ λ€λ₯Έ 그리λ μμ±μ μ¬μ©νμ¬ μμ΄ν μμλ₯Ό ν¬κ² λ³κ²½νλ©΄, λ Όλ¦¬μ μΈ μ½κΈ° μμκ° κΉ¨μ§ μ μμ΅λλ€. νμ μ€ν¬λ¦° 리λλ‘ ν μ€νΈνμ¬ μ½ν μΈ κ° λ Όλ¦¬μ μ΄κ³ μ΄ν΄ κ°λ₯ν μμλ‘ μ 곡λλμ§ νμΈν΄μΌ ν©λλ€.
κΈλ‘λ² μ κ·Όμ±μ 보μ₯νκΈ° μν λͺ κ°μ§ μ€μν μΈ‘λ©΄μ λ€μκ³Ό κ°μ΅λλ€:
- λ Όλ¦¬μ μΈ μμ€ μμ: κ°λ₯ν ν HTML μμ΄ν μ μμ€ μμλ₯Ό λ Όλ¦¬μ μΌλ‘ μ μ§νμΈμ. μ΄λ λ³΄ν΅ μ€ν¬λ¦° 리λλ₯Ό μν λͺ νν μ½κΈ° μμλ₯Ό μ μ§ν΄ μ€λλ€.
- μ€ν¬λ¦° 리λλ‘ ν μ€νΈνκΈ°: macOSμ VoiceOver, Windowsμ NVDAμ κ°μ μ€ν¬λ¦° 리λλ‘ λ μ΄μμμ μ² μ ν ν μ€νΈνμ¬ μ½ν μΈ κ° μ¬λ°λ₯΄κ² μλ΄λλμ§ νμΈνμΈμ.
- μλ§¨ν± HTML:
<article>,<nav>,<aside>,<main>,<header>,<footer>λ±κ³Ό κ°μ μλ§¨ν± HTML μμλ₯Ό μ¬μ©νμ¬ μ€ν¬λ¦° 리λμκ² λͺ νν ꡬ쑰μ μλ―Έλ₯Ό μ 곡νμΈμ. - λ체 ν μ€νΈ (alt text): νμ μ΄λ―Έμ§μ λν μ€λͺ μ μΈ λ체 ν μ€νΈλ₯Ό μ 곡νμΈμ.
- ARIA μμ±: νμν κ²½μ° μΆκ°μ μΈ λ§₯λ½μ μ 곡νκΈ° μν΄ ARIA μμ±(μ:
aria-label,aria-describedby)μ μ¬μ©νλ, κ³Όμ©μ νΌνμΈμ. - ν€λ³΄λ λ΄λΉκ²μ΄μ : λ μ΄μμμ΄ ν€λ³΄λλ₯Ό μ¬μ©νμ¬ νμ κ°λ₯νλλ‘ νμΈμ. μ¬μ©μλ λ Όλ¦¬μ μΈ μμλ‘ μνΈμμ© κ°λ₯ν μμλ€μ νμΌλ‘ μ΄λν μ μμ΄μΌ ν©λλ€.
μ±λ₯ λ° μ΅μ ν
CSS 그리λλ μΌλ°μ μΌλ‘ μ±λ₯μ΄ μ’μ§λ§, νΉν μΉμ¬μ΄νΈκ° μ±μ₯ν¨μ λ°λΌ λ μ΄μμμ μ΅μ ννκΈ° μν΄ κ³ λ €ν΄μΌ ν λͺ κ°μ§ μ¬νμ΄ μμ΅λλ€:
- κ³Όλν 그리λ νΈλ νΌνκΈ°: νΉν μμμ μΈ κ·Έλ¦¬λ νΈλμ κ³Όλνκ² μμ±νλ κ²μ νΌνμΈμ. μ΄λ μ±λ₯ λ¬Έμ λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
grid-template-columnsμgrid-template-rowsλ₯Ό μ μ€νκ² κ³ννμΈμ. - 볡μ‘ν κ³μ° μ€μ΄κΈ°: CSS λ΄μμ 볡μ‘ν κ³μ° μ¬μ©μ μ΅μννμΈμ. λΈλΌμ°μ μμ§μ νΉμ μ νμ κ³μ°μ μ΅μ νλμ΄ μμΌλ©° μ νμ΄ μμ μ μμ΅λλ€.
- μ΄λ―Έμ§ μ΅μ ν: νμ μΉ μ¬μ©μ λ§κ² μ΄λ―Έμ§λ₯Ό μ΅μ ννμΈμ. μ μ ν μ΄λ―Έμ§ νμ(μ: WebP)μ μ¬μ©νκ³ , μ΄λ―Έμ§λ₯Ό μμΆνλ©°,
<picture>μμλ λ°μν μ΄λ―Έμ§ κΈ°μ μ μ¬μ©νμ¬ λ°μν μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ 곡νμΈμ. μ΄λ λͺ¨λ μ§μμμ μΈμ§λλ λ‘λ© μκ°μ μν₯μ λ―ΈμΉ©λλ€. - CSS μΆμ λ° λ²λ€λ§: CSS νμΌμ μΆμνκ³ λ²λ€λ‘ λ¬Άμ΄ HTTP μμ² μλ₯Ό μ€μ΄μΈμ. λ λμ ꡬμ±κ³Ό μ μ§λ³΄μμ±μ μν΄ Sassλ Lessμ κ°μ CSS μ μ²λ¦¬κΈ°λ₯Ό μ¬μ©νλ κ²μ κ³ λ €νμΈμ.
- μ€μ κΈ°κΈ°μμ ν μ€νΈνκΈ°: ꡬν κΈ°κΈ° λ° μ μ¬μ κΈ°κΈ°, κ·Έλ¦¬κ³ λ€λ₯Έ μ§μμμ μΌλ°μ μΌλ‘ μ¬μ©λλ κΈ°κΈ°λ₯Ό ν¬ν¨ν λ€μν κΈ°κΈ°μ λΈλΌμ°μ μμ λ μ΄μμμ ν μ€νΈνμΈμ. λ€μν λ€νΈμν¬ μ‘°κ±΄μμλ ν μ€νΈνμΈμ.
κ΅μ ν(i18n) λ° νμ§ν(l10n) κ³ λ €μ¬ν
κΈλ‘λ² μ¬μ©μλ₯Ό μν μΉμ¬μ΄νΈλ₯Ό ꡬμΆν λ, κ΅μ ν(i18n)μ νμ§ν(l10n)λ₯Ό κ³ λ €ν΄μΌ ν©λλ€. μλ λ°°μΉκ° μ΄μ μ΄λ»κ² μν₯μ λ―ΈμΉ μ μλμ§ μμλ³΄κ² μ΅λλ€:
- ν
μ€νΈ λ°©ν₯ (LTR/RTL): μλμ΄, νλΈλ¦¬μ΄μ κ°μ μΌλΆ μΈμ΄λ μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘(RTL) μμ±λλ€λ μ μ κ³ λ €νμΈμ. RTL λ μ΄μμμ μ²λ¦¬νκΈ° μν΄
directionκ³Όtext-alignμμ±μ μ¬λ°λ₯΄κ² μ¬μ©νμΈμ. CSS 그리λλ λ³Έμ§μ μΌλ‘ RTLμ μ μν μ μμ§λ§, λ μ΄μμμ΄ μ¬λ°λ₯΄κ² λμνλμ§ νμΈν΄μΌ ν©λλ€. - μ½ν μΈ κΈΈμ΄: λ€λ₯Έ μΈμ΄μ μ½ν μΈ λ κΈΈμ΄κ° λ€λ₯Ό μ μμ΅λλ€. νΉν ν€λλΌμΈκ³Ό μ€λͺ μ λν΄ λ€μν ν μ€νΈ κΈΈμ΄λ₯Ό μμ©ν μ μλλ‘ λ μ΄μμμ λμμΈνμΈμ. `minmax()`λ₯Ό μ¬μ©νμ¬ μ½ν μΈ κ° κ·Έλ¦¬λ μ μμ λ§λλ‘ νμΈμ.
- κΈκΌ΄ μ§μ: μΉμ¬μ΄νΈκ° νκ²ν νλ μΈμ΄λ₯Ό μ§μνλ κΈκΌ΄μ μ¬μ©νλμ§ νμΈνμΈμ. νμν κ²½μ° λ체 κΈκΌ΄μ μ 곡νμΈμ. κ΄λ²μν μΈμ΄ μ§μμ μ 곡νλ κ΅¬κΈ ν°νΈλ λ€λ₯Έ μΉ ν°νΈ μλΉμ€λ₯Ό μ¬μ©νλ κ²μ κ³ λ €νμΈμ.
- ν΅ν λ° μ«μ μμ: κ°κ²©μ΄λ μ«μλ₯Ό νμνλ κ²½μ°, μ¬μ©μμ λ‘μΊμ λ°λΌ μμμ μ§μ νμΈμ. μ μ ν ν΅ν κΈ°νΈμ μ«μ νμμ νμ©νμΈμ.
- λ μ§ λ° μκ° μμ: μ¬μ©μμ μ§μμ μ ν©ν νμμΌλ‘ λ μ§μ μκ°μ νμνμΈμ. λ μ§ λ° μκ° μμ μ²λ¦¬λ₯Ό μν΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ κ²μ κ³ λ €νμΈμ.
- μ μ κ°λ₯ν λ―Έλμ΄: λ μ΄μμμ΄ νμ§νκ° νμν μ μλ λ―Έλμ΄(μ΄λ―Έμ§, λΉλμ€)λ₯Ό μμ©νλμ§ νμΈνμΈμ. μλ₯Ό λ€μ΄, ν μ€νΈκ° ν¬ν¨λ μ΄λ―Έμ§λ ν΄λΉ ν μ€νΈλ₯Ό μ¬λ¬ μΈμ΄λ‘ λ²μν΄μΌ ν μ μμ΅λλ€.
κ³ κΈ κΈ°μ λ° κ³ λ €μ¬ν
μ΄λ¦ μλ 그리λ λΌμΈ
μ΄λ¦ μλ 그리λ λΌμΈμ μ½λλ₯Ό λ μ½κΈ° μ½κ³ μ μ§λ³΄μνκΈ° μ’κ² λ§λ€μ΄ μ€λλ€. 그리λ ν νλ¦Ώμ μ μν λ 그리λ λΌμΈμ μ΄λ¦μ μ§μ ν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ μμ΄ν μ λ°°μΉν λ μ«μ λμ μ΄λ¦μ μ¬μ©νμ¬ κ·Έλ¦¬λ λΌμΈμ μ°Έμ‘°ν μ μμ΅λλ€. μ΄λ 볡μ‘ν λ μ΄μμμ μ μ©ν©λλ€.
.grid-container {
display: grid;
grid-template-columns: [col-start] 1fr [col-mid] 1fr [col-end];
}
.item-one {
grid-column: col-start / col-end;
}
μ€μ²© 그리λ
CSS 그리λλ₯Ό μ¬μ©νλ©΄ 그리λ μμ΄ν λ΄μ 그리λ 컨ν μ΄λλ₯Ό μ€μ²©ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ 체 그리λ λ΄μ 볡μ‘ν μΉμ λ μ΄μμμ λ μΈλ°νκ² μ μ΄ν μ μμ΅λλ€. μ΄λ 볡μ‘ν λ μ΄μμκ³Ό λͺ¨λμ λμμΈμ κ°λ₯νκ² ν©λλ€.
<div class="grid-container">
<div class="grid-item">
<div class="nested-grid">
<div class="nested-item">Item 1</div>
<div class="nested-item">Item 2</div>
</div>
</div>
</div>
.nested-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
그리λμ λ€λ₯Έ λ μ΄μμ λ°©λ² κ²°ν©νκΈ°
CSS 그리λλ Flexboxμ κ°μ λ€λ₯Έ λ μ΄μμ λ°©λ²κ³Ό μ μλν©λλ€. 그리λ μμ΄ν λ΄μμ λ μΈλ°ν μ μ΄λ₯Ό μν΄ Flexboxλ₯Ό μ¬μ©ν μ μμ΅λλ€. νμ΄λΈλ¦¬λ μ κ·Ό λ°©μμ μ¬μ©νλ©΄ λ ν° μ μ΄λ ₯κ³Ό μ μ°μ±μ μ»μ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μν μ λ ¬μλ Flexboxλ₯Ό, μμ§ μ λ ¬μλ 그리λλ₯Ό μ¬μ©νλ κ² λ±μ λλ€.
κ²°λ‘
CSS 그리λμ μλ λ°°μΉ κΈ°λ₯μ λ€μν νλ©΄ ν¬κΈ°μ μ½ν μΈ λ³νμ λ§€λλ½κ² μ μνλ λμ μ΄κ³ λ°μν λ μ΄μμμ λ§λλ κ°λ ₯ν λꡬμ λλ€. λ€μν μλ λ°°μΉ μκ³ λ¦¬μ¦, μμ±, κ·Έλ¦¬κ³ λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨, κΈλ‘λ² μ¬μ©μλ₯Ό μν μ μ°νκ³ μ μ§λ³΄μ κ°λ₯ν μΉμ¬μ΄νΈλ₯Ό ꡬμΆν μ μμ΅λλ€. λμμΈ λ° κ°λ° κ³Όμ μ λ°μ κ±Έμ³ μ κ·Όμ±, μ±λ₯, κ΅μ νλ₯Ό κ³ λ €νλ κ²μ μμ§ λ§μΈμ. μ΄λ¬ν κΈ°μ μ λ§μ€ν°νλ©΄ μ μΈκ³ λͺ¨λ μ¬μ©μλ₯Ό μν΄ μ΄λ€ κΈ°κΈ°μμλ λ©μ§κ² 보μ΄λ νλμ μΈ μΉ κ²½νμ μ°½μΆν μ μμ΅λλ€.
λ€μν 그리λ λ μ΄μμμΌλ‘ κ³μ μ°μ΅νκ³ μ€ννμΈμ. CSS 그리λλ₯Ό λ λ§μ΄ μ¬μ©ν μλ‘ λ λ₯μν΄μ§ κ²μ λλ€. CSS 그리λλ κ³μν΄μ λ°μ νλ©° μΉ λμμΈμ λμ± ν₯λ―Έλ‘μ΄ κ°λ₯μ±μ μ 곡νλ―λ‘ μ΅μ CSS 그리λ μ¬μμ λν μ 보λ₯Ό κ³μ μ λ°μ΄νΈνμΈμ.